package org.pqw.commonapi.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * stream 工具类
 * @author 白衣雪
 * @since 2021/6/28 21:52
 */
public class StreamUtil {

    /**
     * <p>
     * 举个例子，将User#age 相同的元素去掉
     * List<User> list = this.getList();
     *list.stream().filter(StreamUtil.filterByKey(User::age).collector(Collectors.toList()))
     * </p>
     * 根据key过滤元素
     * @param selector 选择器
     * @param <T> 类型
     * @param <R> 类型
     * @return true or false
     */
    public static<T,R>  Predicate<T> filterByKey(Function<? super Object, R> selector){
        Map<R, Boolean> map = new HashMap<>(1 << 8);
        return k->map.putIfAbsent(selector.apply(k), Boolean.TRUE) == null;
    }
}
